HTMLify

audio.js
Views: 45 | Author: cody
(function () {
  // The number of bars that should be displayed
  const Bar_number = 50;

  // Get the audio element tag
  const audio = document.querySelector("audio");
  // audio.crossOrigin = "anonymous";
  const ctx = new AudioContext();

  // Creating an audio source
  const audioSource = ctx.createMediaElementSource(audio);

  const analayzer = ctx.createAnalyser();

  audioSource.connect(analayzer);
  audioSource.connect(ctx.destination);

  // Print the analyze frequencies
  const frequencyData = new Uint8Array(analayzer.frequencyBinCount);
  analayzer.getByteFrequencyData(frequencyData);
  console.log("frequencyData", frequencyData);

  // Get the visualizer container
  const visualizerContainer = document.querySelector(".visualizer-container");

  // Creating a set of pre-defined bars
  for (let i = 0; i < Bar_number; i++) {
    const bar = document.createElement("DIV");
    bar.setAttribute("id", "bar" + i);
    bar.setAttribute("class", "visualizer-container__bar");
    visualizerContainer.appendChild(bar);
  }

  // This function has the task to adjust the bar heights according to the frequency data
  function renderFrame() {
    analayzer.getByteFrequencyData(frequencyData);

    for (let i = 0; i < Bar_number; i++) {
      const index = (i + 10) * 2;

      const fd = frequencyData[index];

      const bar = document.querySelector("#bar" + i);
      if (!bar) {
        continue;
      }

      const barHeight = Math.max(4, fd || 0);
      bar.style.height = barHeight + "px";
    }

    window.requestAnimationFrame(renderFrame);
  }

  renderFrame();

  audio.volume = 0.6;
  audio.play();
})();

Comments